#ifndef __M3508_H
#define __M3508_H

#include "device.h"

#define M3508_FDBK_ID_MASK  (~0x7)
#define M3508_FDBK_ID_CMP    0x200
#define IS_M3508_FDBK_ID(ID)    ((ID & M3508_FDBK_ID_MASK) == M3508_FDBK_ID_CMP)


typedef struct
{
    uint16_t angle;     //转子机械角度
    int16_t speed;      //转子速度
    int16_t current;    //实际电流
    uint8_t temp;       //电机温度
    uint32_t fdbktime;  //反馈时间
    uint32_t count;     //累计收包数
    int32_t sum_angle;  //累计角度，最多行进6.5km，就会写爆
} M3508_FDBK_UNIT, *P_M3508_FDBK_UNIT;


typedef struct
{
    M3508_FDBK_UNIT m1;
    M3508_FDBK_UNIT m2;
    M3508_FDBK_UNIT m3;
    M3508_FDBK_UNIT m4;
    M3508_FDBK_UNIT m5;
    M3508_FDBK_UNIT m6;
    M3508_FDBK_UNIT m7;
    M3508_FDBK_UNIT m8;
} M3508_FDBK, *P_M3508_FDBK;


typedef enum
{
    M3508_PACK_1_4,
    M3508_PACK_5_8,
} M3508_PACK;

typedef struct
{
    int16_t setcur[4]; //8个电机的控制电流
    M3508_PACK pack;
} M3508_CTRL, *P_M3508_CTRL;

void m3508SetCurrent(P_M3508_CTRL pctrl, CAN_HandleTypeDef *hcan);
void m3508ResetFeedBack(P_M3508_FDBK pfdbk);
uint8_t m3508FeedBack(P_CAN_RX pcanrx, P_M3508_FDBK pfdbk);


#endif


